<?xml version="1.0" encoding="UTF-8"?>
<html>
    <head>
        <link type="text/css" rel="stylesheet" href="./css/template.css" />
        <link type="text/css" rel="stylesheet" href="./css/SyntaxHighlighter.css" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Présentation de JavaSound - Article 1/1 - Java &amp; Solaris par le Laboratoire SUPINFo des technologies Sun </title>
        <script language="javascript" src="./js/shInit.js" />
        <script language="javascript" src="./js/shCore.js" />
        <script language="javascript" src="./js/shBrushCpp.js" />
        <script language="javascript" src="./js/shBrushCSharp.js" />
        <script language="javascript" src="./js/shBrushCss.js" />
        <script language="javascript" src="./js/shBrushDelphi.js" />
        <script language="javascript" src="./js/shBrushJava.js" />
        <script language="javascript" src="./js/shBrushJScript.js" />
        <script language="javascript" src="./js/shBrushPhp.js" />
        <script language="javascript" src="./js/shBrushPython.js" />
        <script language="javascript" src="./js/shBrushRuby.js" />
        <script language="javascript" src="./js/shBrushSql.js" />
        <script language="javascript" src="./js/shBrushVb.js" />
        <script language="javascript" src="./js/shBrushXml.js" />
        <keywords>javasound,son,midi,wave,Java,Java SE,Son,presentation,de,javasound,articles,4,4,certification,sun,java,solaris,articles,essentiels,tips,astuces,codes,exemple,tutorial,developpement,jsp,servlet,jdbc,jdo,j2se,j2ee,laboratoire</keywords>
        <author>Vanessa Colognac</author>
    </head>
    <body>
        <div class="chapter">
            <h2>Présentation de JavaSound</h2>
            <p>JavaSound est un ensemble de classes destinées à la programmation musicale et sonore. Depuis la version 1.3 de Java2, JavaSound fait partie de la bibliothèque de classes sous la forme des packages javax.sound.midi et javax.sound.sampled.</p>
            <ul>
                <li>Javax.sound.midi : Classe pour la lecture, l'enregistrement et la synthèse des fichiers son au format MIDI.</li>
                <li>Javax.sound.sampled : Classe pour la lecture, l'enregistrement et le mixage des fichiers audio enregistrés.</li>
            </ul>
            <p>La bibliothèque JavaSound supporte tous les formats audio pouvant être lus dans les applets et les applications, à savoir AIFF, AU, WAV et les formats MIDI (type0, type1 et RMF)</p>
        </div>
        <div class="chapter">
            <h2>Les fichiers MIDI</h2>
            <p>Le package java.sound.midi offre une prise en charge étendue des fichiers musicaux MIDI. Le format MIDI (Musical Instrument Digital Interface) permet de stocker les sons en tant que série de notes et d'effets produits par des instruments synthétisés par ordinateur.</p>
            <p>Dans les fichiers MIDI, on stocke des instructions indiquant aux séquenceurs MIDI comment reproduire les sons, quelles instructions synthétisées utiliser, et d'autres aspects de la présentation. Le son d'un fichier MIDI dépend de la qualité et de la variété des instructions disponibles sur l'ordinateur ou l'appareil de lecture.</p>
            <p>Chaque élément d'une présentation MIDI est représenté par une interface ou une classe du package javax.sound.midi. Il s'agit de l'interface Sequencer et des classes Sequence, Track et MidiEvent. La classe MidiSystem permet d'accéder aux ressources de lecture et de stockage MIDI sur un système informatique.</p>
        </div>
        <div class="chapter">
            <h2>Lecture d'un fichier MIDI</h2>
            <p>Pour lire un fichier MIDI à l'aide de JavaSound, il vous faut créer un objet Sequencer.</p>
            <p>La méthode getSequencer() de la classe MidiSystem retourne un objet Sequencer qui représente le séquenceur par défaut d'un système :</p>
            <textarea name="code" class="java">Sequencer midi = MidiSystem.getSequencer() ;</textarea>
            <p>Cette méthode de classe génère une exception (MidiUnavaibleException) si le séquenceur n'est pas disponible pour une raison ou une autre.</p>
            <p>Après avoir créé un objet Sequencer pouvant lire les fichiers MIDI, il faut appeler une autre méthode de la classe MidiSystem pour accéder à une séquence MIDI à partir d'une source de données. Ces méthodes sont :</p>
            <ul>
                <li>getSequence(File) : Charge une séquence depuis le fichier spécifié.</li>
                <li>getSequence(URL) : Charge une séquence depuis l'adresse Internet spécifiée.</li>
                <li>getSequence(InputStream) : Charge une séquence à partir du flux d'entrées des données, qui peut provenir d'un fichier, d'un appareil d'entrée ou d'un autre programme.</li>
            </ul>
            <p>Pour charger une séquence MIDI à partir d'un fichier, il faut d'abord créer un objet File en utilisant son nom de fichier ou une référence à ce nom de fichier et au dossier dans lequel il se trouve.</p>
            <p>Si le fichier se trouve dans le même dossier que le programme Java, on peut le créer à l'aide de la méthode constructeur File(String) de ce nom.</p>
            <p>Ci-dessous, voila l'instruction qui permet de créer un objet File pour un fichier MIDI appelé wzer.mid :</p>
            <textarea name="code" class="java">File sound = new File(« wzer.mid ») ;
				//Si le fichier se trouve dans un dossier à part:
				File sound = new File(« chemin/wzer.mid ») ;</textarea>
            <p>Le constructeur File génère une exception : NullpointerException si l'argument de la méthode constructeur possède une valeur null.</p>
            <p>Une fois l'objet File créé, il faut appeler la méthode getSequence(File) pour créer un séquence :</p>
            <textarea name="code" class="java">File sound = new File(« wzer.mid ») ;
				Sequence seq = MidiSystem.getSequence(sound);</textarea>
            <p>Si tout se passe bien, la méthode de classe getSequence() retournera un objet Sequence.</p>
            <p>Sinon, deux sortes d'erreurs peuvent être générées par la méthode :</p>
            <ul>
                <li>InvalidMidiDataException si le système ne peut pas gérer les données MIDI.</li>
                <li>IoException si l'entrée du fichier a été interrompue ou a échouée pour quelque raison que ce soit.</li>
            </ul>
            <p>Nous disposons alors d'un séquenceur MIDI et d'une séquence à lire. Pour lire une séquence :</p>
            <ul>
                <li>Appelez la méthode open() du séquenceur pour que la plate-forme se prépare à lire un fichier.</li>
                <li>Appelez la méthode start() du séquenceur pour commencer à lire la séquence.</li>
                <li>Attendre la fin de la lecture de la séquence.</li>
                <li>Appelez la méthode close() du séquenceur pour rendre l'appareil disponible à d'autres tâches.</li>
            </ul>
        </div>
        <div class="chapter">
            <h2>Manipulation des fichiers audio</h2>
            <p>Les avantages de JavaSound deviennent évidents lors de la manipulation des fichiers audio. En effet, on peut modifier l'aspect de la présentation et de l'enregistrement des fichiers audio à l'aide des packages JavaSound.</p>
            <p>Pour effectuer cette opération sur un objet Sequencer existant, il faut appeler sa méthode setTempoFactor(float). Le tempo est représenté par une valeur float commençant à 0.0.</p>
            <p>Pour accélérer le tempo actuel, il faut appelé la méthode getTempoFactor(), qui retourne une valeur float.</p>
            <p>Voila, cet article est maintenant fini. J'espère qu'il vous permettra de vous amuser avec les fichiers audio et MIDI...</p>
        </div>
    </body>
</html>

